(function () {
    Object.defineProperties(Object.prototype, {
        //转换为字符类型
        toStr: {
            value: function (defaultValue) {
                defaultValue = defaultValue || '';
                if (this.isJson()) {
                    return JSON.stringify(this, function (k, v) {
                        if (v === undefined) {
                            return null;
                        } else {
                            return v;
                        }
                    });
                } else if (this) {
                    return this.toString();
                } else {
                    return defaultValue;
                }
            },
            writable: true
        },
        //转换为整数类型
        toInt: {
            value: function (defaultValue) {
                defaultValue = defaultValue || 0;
                var i = parseInt(this);
                if (isNaN(i)) {
                    return defaultValue;
                } else {
                    return i;
                }
            },
            writable: true
        },
        //转换为浮点类型
        toFloat: {
            value: function (defaultValue) {
                defaultValue = defaultValue || 0;
                var i = parseFloat(this);
                if (isNaN(i)) {
                    return defaultValue;
                } else {
                    return i;
                }
            },
            writable: true
        },
        //转换为日期类型
        toDate: {
            value: function (fmt, defaultValue) {
                defaultValue = defaultValue || null;
                try {
                    var date = new Date(this);
                    var o = {
                        "M+": date.getMonth() + 1, //月
                        "d+": date.getDate(), //日 
                        "h+": date.getHours(), //时 
                        "m+": date.getMinutes(), //分
                        "s+": date.getSeconds(), //秒
                        "q+": Math.floor((date.getMonth() + 3) / 3), //季
                        "S": date.getMilliseconds() //毫秒
                    };
                    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
                    for (var k in o)
                        if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
                    return fmt;
                } catch (err) {
                    return defaultValue;
                }
            },
            writable: true
        },
        //判断是否为json对象
        isJson: {
            value: function () {
                return typeof this == "object" && (Object.prototype.toString.call(this) == "[object Object]" || Object.prototype.toString.call(this) == "[object Array]");
            },
            writable: true
        }
    });

    Object.defineProperties(String.prototype, {
        //去除首尾指定字符
        trim: {
            value: function (char, type) {
                var str = this.toString();
                if (char) {
                    if (type == 'l') {
                        return str.replace(new RegExp('^\\' + char + '+', 'g'), '');
                    } else if (type == 'r') {
                        return str.replace(new RegExp('\\' + char + '+$', 'g'), '');
                    }
                    return str.replace(new RegExp('^\\' + char + '+|\\' + char + '+$', 'g'), '');
                }
                return str.replace(/^\s+|\s+$/g, '');
            },
            writable: true
        }
    });
})();